Started to implement the Create Domain Wizzard.
Doesn't work yet (along way off).
Slight refactoring of other code to make it more extensible
40dc4076St6AmPTmQPrtQ6LGHPxGmw tools/python/xen/lowlevel/xu/__init__.py
40dc4076pVeE1kEEWzcUaNZin65kCA tools/python/xen/lowlevel/xu/domain_controller.h
40dc4076CwBYRTUQDdbdU1L6KcLgSw tools/python/xen/lowlevel/xu/xu.c
+41052eb84_irpx0E9N_kqBp9eoin5g tools/python/xen/sv/CreateDomain.py
40fcefb2qm13BbRZBydAatOavaS0fQ tools/python/xen/sv/DomInfo.py
40fcefb2-RIU8GB67mJMRzybME9bxw tools/python/xen/sv/DomList.py
40fcefb23FfQn-ZBCbcHqA0cPGqQxw tools/python/xen/sv/GenTabbed.py
40fcefb2vnfDbl4w_yCTedROPuqs0g tools/python/xen/sv/Main.py
40fcefb24h-04WaHag-Tg4nxWPhTig tools/python/xen/sv/NodeInfo.py
40fcefb2Sif__6AqrANeBQZZfvP-6w tools/python/xen/sv/TabView.py
+41052eb8UrgtUkuJPg7oY1tutVQHsg tools/python/xen/sv/Wizzard.py
40fcefb2DqteqCCZYDCvvh4Q5jBd0w tools/python/xen/sv/__init__.py
40fcefb4rnaZNjqsBu7A5V2rlLyqRw tools/python/xen/sv/util.py
40d8915cyoVA0hJxiBFNymL7YvDaRg tools/python/xen/util/Brctl.py
40fcefb3K6ESt5sQhD9aCQRscQIlXQ tools/sv/images/left-end-no-highlight.jpg
40fcefb3BUT98zPzW8kAFKuxGdh4XA tools/sv/images/middle-highlight.jpg
40fcefb38OTgsUKHBpwshLLIsiIaCA tools/sv/images/middle-no-highlight.jpg
+41052eb9SDUqSLGtG6rxk6Ep5fOhFA tools/sv/images/next.png
40fcefb32SPtrw36c4S6YGFlLvkKuw tools/sv/images/orb_01.jpg
40fcefb3Ok5qkX3iM7ZEPVkRInrUpg tools/sv/images/orb_02.jpg
4104ffca9_GhWOxRE-83uZIad2Z1gg tools/sv/images/pause.png
+41052eb9NQqHe_f9-ev1CaA3y5YYZg tools/sv/images/previous.png
41013a82ILk71xLqWFH5ZO5VmOIvBw tools/sv/images/reboot.png
40fcefb3JnT5XeKTuVF4yUMGOtuNZg tools/sv/images/right-end-highlight.jpg
40fcefb3-DuYOS7noo2W7b_0p7TOUg tools/sv/images/right-end-no-highlight.jpg
--- /dev/null
+from xen.sv.Wizzard import Wizzard, Sheet
+
+class CreateDomain( Wizzard ):
+ def __init__( self, urlWriter ):
+
+ sheets = { 0: CreatePage0,
+ 1: CreatePage1,
+ 2: CreatePage2,
+ 3: CreatePage3 }
+
+ Wizzard.__init__( self, urlWriter, "Create Domain Wizzard", sheets )
+
+class CreatePage0( Sheet ):
+
+ def __init__( self, urlWriter ):
+
+ feilds = [( 'name', 'Name')]
+
+ Sheet.__init__( self, urlWriter, feilds, "Create New Domain - 1" )
+
+class CreatePage1( Sheet ):
+
+ def __init__( self, urlWriter ):
+
+ feilds = [( 'name', 'Name')]
+
+ Sheet.__init__( self, urlWriter, feilds, "Create New Domain - 2" )
+
+class CreatePage2( Sheet ):
+
+ def __init__( self, urlWriter ):
+
+ feilds = [( 'name', 'Name')]
+
+ Sheet.__init__( self, urlWriter, feilds, "Create New Domain - 3" )
+
+class CreatePage3( Sheet ):
+
+ def __init__( self, urlWriter ):
+
+ feilds = [( 'name', 'Name')]
+
+ Sheet.__init__( self, urlWriter, feilds, "Create New Domain - 4" )
\ No newline at end of file
self.dom = 0;
def tabUrlWriter( tab ):
- return urlWriter( "mod=info&dom=%s%s" % ( self.dom, tab ) )
+ return urlWriter( "&dom=%s%s" % ( self.dom, tab ) )
GenTabbed.__init__( self, "Domain Info", tabUrlWriter, [ 'General', 'SXP', 'Devices' ], [ DomGeneralTab, DomSXPTab, NullTab ] )
def write_BODY( self, request ):
- dom = request.args.get('dom')
+ self.dom = getVar('dom', request)
- if dom is None or len(dom) != 1:
+ if self.dom is None:
request.write( "<p>Please Select a Domain</p>" )
return None
- else:
- self.dom = dom[0]
self.dict = getDomInfoHash( self.dom )
def write_BODY( self, request ):
- dom = request.args.get('dom')
+ self.dom = getVar('dom', request)
- if dom is None or len(dom) != 1:
+ if self.dom is None:
request.write( "<p>Please Select a Domain</p>" )
return None
- else:
- self.dom = dom[0]
-
+
domInfo = server.xend_domain( self.dom )
- self.source = sxp2string( domInfo )
+ self.source = sxp2prettystring( domInfo )
PreTab.write_BODY( self, request )
def write_DOMAIN( self, request, domInfoHash, long=True ):
request.write( "<td class='domainInfo' align='center'>%(dom)-4d</td>\n" % domInfoHash )
- url = self.urlWriter( "mod=info&dom=%(dom)-4d" % domInfoHash )
+ url = self.urlWriter( "&mod=info&dom=%(dom)-4d" % domInfoHash )
request.write( "<td class='domainInfo' align='center'><a href='%s'>%s</a></td>\n" % ( url, domInfoHash['name'] ) )
if long:
from xen.sv.HTMLBase import HTMLBase
from xen.sv.TabView import TabView
+from xen.sv.util import getVar
class GenTabbed( HTMLBase ):
def __init__( self, title, urlWriter, tabStrings, tabObjects ):
HTMLBase.__init__(self)
- self.tab = 0;
self.tabStrings = tabStrings
self.tabObjects = tabObjects
self.urlWriter = urlWriter
self.title = title
def write_BODY( self, request, urlWriter = None ):
- tab = request.args.get('tab')
-
- if tab is None or len( tab) != 1:
- self.tab = 0
- else:
- self.tab = int( tab[0] )
+
+ tab = int( getVar( 'tab', request, 0 ) )
request.write( "<table style='' width='100%' border='0' cellspacing='0' cellpadding='0'>" )
request.write( "<tr><td>" )
request.write( "<p align='center'><u>%s</u></p>" % self.title )
- TabView( self.tab, self.tabStrings, self.urlWriter ).write_BODY( request )
+ TabView( tab, self.tabStrings, self.urlWriter ).write_BODY( request )
request.write( "</td></tr><tr><td>" )
- render_tab = self.tabObjects[ self.tab ]
+ render_tab = self.tabObjects[ tab ]
if render_tab is None:
request.write( "<p>Bad Tab</p>" )
request.write( "</td></tr></table>" )
def perform( self, request ):
- tab = request.args.get('tab')
-
- if tab is None or len( tab) != 1:
- self.tab = 0
- else:
- self.tab = int( tab[0] )
+ tab = int( getVar( 'tab', request, 0 ) )
- op_tab = self.tabObjects[ self.tab ]
+ op_tab = self.tabObjects[ tab ]
if op_tab:
op_tab().perform( request )
from xen.sv.DomList import DomList
from xen.sv.NodeInfo import NodeInfo
from xen.sv.DomInfo import DomInfo
+from xen.sv.CreateDomain import CreateDomain
+
+from xen.sv.util import getVar
class Main( HTMLBase ):
isLeaf = True
def __init__( self, urlWriter = None ):
- self.modules = { "node": ( "Node details", NodeInfo ),
- "list": ( "Domain summary", DomList ),
- "info": ( "Domain info", DomInfo ) }
+ self.modules = { "node": NodeInfo,
+ "list": DomList,
+ "info": DomInfo,
+ "create": CreateDomain }
HTMLBase.__init__(self)
def render_POST( self, request ):
#decide what module post'd the action
- mod = request.args.get('mod')
+ mod = getVar( 'mod', request )
- if not mod is None and len(mod) == 1:
- modTup = self.modules[ mod[0] ]
+ if not mod is None:
+ module = self.modules[ mod ]
#check module exists
- if modTup:
- (modName, module) = modTup
+ if module:
module( self.mainUrlWriter ).perform( request )
return self.render_GET( request )
- def mainUrlWriter( self, s ):
- return "Main.rpy?%s" % s
-
+ def mainUrlWriter( self, module ):
+ def fun( f ):
+ return "Main.rpy?mod=%s%s" % ( module, f )
+ return fun
+
def write_BODY( self, request ):
request.write( "\n<table style='border:0px solid black; background: url(images/orb_01.jpg) no-repeat' cellspacing='0' cellpadding='0' border='0' width='780px' height='536px'>\n" )
request.write( " <tr><td height='60px' align='center'><p class='small'>SV Web Interface<br/>(C) <a href='mailto:tw275@cam.ac.uk'>Tom Wilkie</a> 2004</p></td></tr>")
request.write( " <tr><td align='center' valign='top'>" )
- for (modName, (modTitle, module)) in self.modules.items():
- module( self.mainUrlWriter ).write_MENU( request )
+ for (modName, module) in self.modules.items():
+ module( self.mainUrlWriter( modName ) ).write_MENU( request )
request.write( " </td></tr>" )
request.write( " </table>" )
request.write( " <tr><td height='20px'></td></tr>" )
request.write( " <tr><td align='center' valign='top'>" )
- mod = request.args.get('mod')
+ modName = getVar('mod', request)
- if mod is None or len(mod) != 1:
+ if modName is None:
request.write( '<p>Please select a module</p>' )
else:
- modTup = self.modules[ mod[0] ]
- if modTup:
- (modName, module) = modTup
- module( self.mainUrlWriter ).write_BODY( request )
+ module = self.modules[ modName ]
+ if module:
+ module( self.mainUrlWriter( modName ) ).write_BODY( request )
else:
request.write( '<p>Invalid module. Please select another</p>' )
def __init__( self, urlWriter ):
- def newUrlWriter( url ):
- return urlWriter( "mod=node%s" % url )
-
- GenTabbed.__init__( self, "Node Details", newUrlWriter, [ 'General', 'Dmesg', ], [ NodeGeneralTab, NodeDmesgTab ] )
+ GenTabbed.__init__( self, "Node Details", urlWriter, [ 'General', 'Dmesg', ], [ NodeGeneralTab, NodeDmesgTab ] )
def write_MENU( self, request ):
request.write( "<p class='small'><a href='%s'>Node details</a></p>" % self.urlWriter( '' ) )
--- /dev/null
+from xen.sv.util import *
+from xen.sv.HTMLBase import HTMLBase
+from xen.xend import sxp
+
+class Wizzard( HTMLBase ):
+
+ def __init__( self, urlWriter, title, sheets ):
+ HTMLBase.__init__( self )
+ self.title = title
+ self.sheets = sheets
+ self.currSheet = 0
+ self.urlWriter = urlWriter
+
+ def write_MENU( self, request ):
+ request.write( "<p class='small'><a href='%s'>%s</a></p>" % (self.urlWriter( '' ), self.title) )
+
+ def write_BODY( self, request ):
+
+ request.write( "<table width='100%' border='0' cellspacing='0' cellpadding='0'><tr><td>" )
+ request.write( "<p align='center'><u>%s</u></p></td></tr><tr><td>" % self.title )
+
+ currSheet = getVar( 'sheet', request )
+
+ if not currSheet is None:
+
+ self.currSheet = int( currSheet )
+
+ self.sheets[ self.currSheet ]( self.urlWriter ).write_BODY( request )
+
+ request.write( "</td></tr><tr><td><table width='100%' border='0' cellspacing='0' cellpadding='0'><tr>" )
+ request.write( "<td width='80%'></td><td width='20%' align='center'>" )
+ request.write( "<p align='center'><img src='images/previous.png' onclick='doOp( \"prev\" )' onmouseover='update( \"wizText\", \"Previous\" )' onmouseout='update( \"wizText\", \" \" )'> " )
+ request.write( "<img src='images/next.png' onclick='doOp( \"next\" )' onmouseover='update( \"wizText\", \"Next\" )' onmouseout='update( \"wizText\", \" \" )'></p>" )
+ request.write( "<p align='center'><span id='wizText'></span></p></td></tr></table>" )
+ request.write( "</td></tr></table>" )
+
+class Sheet( HTMLBase ):
+
+ def __init__( self, urlWriter, feilds, title ):
+ HTMLBase.__init__( self )
+ self.urlWriter = urlWriter
+ self.feilds = feilds
+ self.title = title
+
+ def parseForm( self, request ):
+ return sxp.toString( request.args )
+
+ def write_BODY( self, request ):
+ request.write( "<p>%s</p>" % self.title )
+
+ previous_values = request.args
+
+ for (feild, name) in self.feilds:
+ value = sxp.child_value( previous_values, feild )
+ if value is None:
+ value = ''
+ request.write( "<p>%s<input type='text' name='%s' value='%s'></p>" % (name, feild, value) )
+
+ def op_next( self, request ):
+ pass
+
+ def op_prev( self, request ):
+ pass
+
+
+
else:
sxphash[ child[0] ] = child[1]
- return sxphash
+ return sxphash
-def sxp2string( sxp ):
+def sxp2prettystring( sxp ):
class tmp:
def __init__( self ):
self.str = ""
PrettyPrint.prettyprint( sxp, out=temp )
return temp.str
-def getVar( var, request ):
+def getVar( var, request, default=None ):
arg = request.args.get( var )
- if arg is None or len(arg) != 1:
- return None
+ if arg is None:
+ return default
else:
- return arg[0]
+ return arg[ len( arg )-1 ]
def bigTimeFormatter( time ):
time = float( time )
install -m0644 images/reboot.png $(sv_insdir)/images
install -m0644 images/pause.png $(sv_insdir)/images
install -m0644 images/unpause.png $(sv_insdir)/images
+
+ install -m0644 images/next.png $(sv_insdir)/images
+ install -m0644 images/previous.png $(sv_insdir)/images
# make include folder
mkdir -p $(sv_insdir)/inc